From 111ea6ac4581ba6e063ec12eec527a98c59df90d Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Thu, 3 Aug 2006 11:10:53 -0600 Subject: [PATCH] [IA64] fix vDSO paravirtualization. sometimes it fails to clear event mask. It results in domain's unstability. And one typo. Signed-off-by: Isaku Yamahata --- linux-2.6-xen-sparse/arch/ia64/kernel/gate.S | 2 +- .../arch/ia64/xen/hypercall.S | 41 +++++++++++-------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S b/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S index dd946e6f8a..b73068e6ff 100644 --- a/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S +++ b/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S @@ -130,7 +130,7 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc) // r20 = 1 // r22 = &vcpu->evtchn_mask // r23 = &vpsr.ic - // r24 = vcpu->pending_interruption + // r24 = &vcpu->pending_interruption // r25 = tmp // r28 = &running_on_xen // r30 = running_on_xen diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S b/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S index 1359c1483b..e49a7494c2 100644 --- a/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S +++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S @@ -379,30 +379,35 @@ GLOBAL_ENTRY(xen_get_psr) ;; END(xen_get_psr) + // see xen_ssm_i() in privop.h + // r22 = &vcpu->evtchn_mask + // r23 = &vpsr.ic + // r24 = &vcpu->pending_interruption + // r25 = tmp + // r31 = tmp + // p11 = tmp + // p14 = tmp +#define XEN_SET_PSR_I \ + ld4 r31=[r22]; \ + ld4 r25=[r24]; \ + ;; \ + st4 [r22]=r0; \ + cmp.ne.unc p14,p0=r0,r31; \ + ;; \ +(p14) cmp.ne.unc p11,p0=r0,r25; \ + ;; \ +(p11) st4 [r22]=r20; \ +(p11) st4 [r23]=r0; \ +(p11) XEN_HYPER_SSM_I; + GLOBAL_ENTRY(xen_ssm_i_0) - st4 [r22]=r20 - ld4 r25=[r24] - ;; - cmp.ne.unc p11,p0=r0, r25 - ;; -(p11) st4 [r22]=r0 -(p11) st4 [r23]=r0 -(p11) XEN_HYPER_SSM_I - + XEN_SET_PSR_I brl.cond.sptk .vdso_ssm_i_0_ret ;; END(xen_ssm_i_0) GLOBAL_ENTRY(xen_ssm_i_1) - st4 [r22]=r20 - ld4 r25=[r24] - ;; - cmp.ne.unc p11,p0=r0, r25 - ;; -(p11) st4 [r22]=r0 -(p11) st4 [r23]=r0 -(p11) XEN_HYPER_SSM_I - ;; + XEN_SET_PSR_I brl.cond.sptk .vdso_ssm_i_1_ret ;; END(xen_ssm_i_1) -- 2.30.2